#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace std;
using namespace ns_compile_and_run;
using namespace httplib;



void Usage(const string proc)
{
    cout << "Usage:" << "\n\t" << proc << " port" << endl;
}

// 编译服务随时可能被多个人请求，必须保证传递上来的code，形成源文件名称的时候，
// 要具有唯一性，不然多个用户之间会影响。
int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    // 把提供的编译运行服务，打包成一个网络服务
    // 直接使用cpp-httplib库
    Server srv;




    // 注册绑定一些服务，参数1是服务名称，参数二是回调函数，提供服务
    // srv.Get("/hello", [](const Request &req, Response &resp){
    //     // 使用Get方法进行测试
    //     resp.set_content("hello httplib， 你好", "text/plain;charset=utf-8");
    // });
    // // 设置根目录首页服务
    // // srv.set_base_dir("./wwwroot");

    srv.Post("/compile_and_run", [](const Request &req, Response &resp){
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json, &out_json);
            // 按照json的方式呈现
            resp.set_content(out_json, "application/json;charset=utf-8");
        }
    }); 
 
    srv.listen("0.0.0.0", atoi(argv[1])); // 启动http服务



    // 通过http让客户端给我们传一个json string
    // 以下工作充当客户端请求的json串
    // string in_json;
    // Json::Value root;
    // string code;
    // FileUtil::ReadFile(PathUtil::Src("test"), &code, true);
    // // R"()", raw string C++的语法，不把字符串里的特殊符号进行解释，保持原生字符串
    // root["code"] = R"(#include<iostream>
    // int main(){
    //     std::cout << "......" << std::endl;
    //     // while(1);
    //     // int *p = new int[1024 * 1024 * 50];
    //     int a = 10;
    //     a /= 0;
    //     return 0;
    // })";
    // // root["code"] = code;
    // root["input"] = "";
    // root["cpu_limit"] = 1;
    // root["mem_limit"] = 10240 * 3;
    
    // Json::StyledWriter writer;
    // in_json = writer.write(root);
    // cout << in_json << endl;

    // string out_json;
    // CompileAndRun::Start(in_json, &out_json);
    // cout << out_json;


    return 0;
}